其他
怎样让国产芯片性能超越Intel
做一次标题党,其实我们做软件的当然没办法改变芯片的性能,也不可能真地让国产芯片超越Intel。
这个话题从去年做过的一次性能测试说起,先看测试结果:
这些题目原本是某大用户在选型数据库时用于评测性能的。给定了数据(结构和规模)和SQL,在同样的硬件环境下让各家数据库都跑一下,看谁的速度最快。
我们从中选择了几个耗时最长的SQL,再做了少量补充。然后准备了两组集群,一组用Intel芯片,另一组用国产飞腾芯片,安装好分布式数据库和集算器,并在数据库中生成测试数据。
1.用SQL在数据库中执行,记录时长;
2.将SQL改写成SPL(这有些工作量,涉及到算法更改),但仍读取数据库中数据计算,记录时长;
3.将数据导出到文件,使用集算器特有的组表格式存储,再改写SPL(更换数据源,使用组表数据源会比使用数据库源更简单)计算,记录时长;
然后就得到了上面那个测试结果表。
还有几点说明:
1.我们刻意选择了一些在原评测中耗时最长的SQL(几乎都>1小时),所以这里看到的数据库上跑SQL的性能都较差;原测试中也有几条能跑得很快的SQL,但这里没有选用。
2.原评测中要求只要返回第一批数据即可,不需要返回全部结果集,这里延用了此规则,但我们补充了一些题目,在其中确保必须把涉及数据全部遍历到才可能计算出结果(比如增加GROUP BY和ORDER BY),这样可以更有效地测试遍历性能。
3.飞腾上数据库的运算性能和Intel上差不多,也不是关注重点,没有再列出了。
4.前两题用SPL读数据库的性能已经非常好,所以没再做读文件的测试了。
从测试结果可以看出:
1.在Intel机上,用SPL读文件的计算性能远远超过数据库用SQL的计算性能,即使用SPL读数据库运算也常常能获得比在数据库中用SQL好得多的性能,这还是在付出了数据库IO成本的代价之后的结果。
2.在飞腾上的SPL读文件的计算性能也远远超过在Intel上数据库的计算性能,在飞腾上用SPL读数据库也比Intel上的纯数据库计算有优势。
那么,SPL是怎么做到高性能的?
就是我们常说的办法,SPL可以采用更高性能的算法,而SQL不可以。
这些题目都不是非常简单的两三行SQL,基本都带有子查询或较多表的JOIN。在充分理解数据特征之后,我们可以设计出更低成本的算法,把运算复杂度降低一个到几个数量级。在这里主要是对有序的利用,SPL的理论体系是基于有序集合的,可以充分利用数据有序的特征来提高性能,而SQL就很难利用这一点,即使知道有好办法优化也无法实施。
这篇文章里不合适解释每个问题的算法了,我们以后会写文章再披露详细的测试过程与算法说明。这里有一篇对前两题的算法解析 http://c.raqsoft.com.cn/article/1545662863743?r=279400248。(其中有个SPL跑得也不快的场景就没有写到测试结果表里了
现在可以解释标题中说的怎样让国产芯片性能超越Intel了,芯片本身的性能并没有超越,超越的是算法。具体来说,就是用SPL在低性能芯片上跑高性能算法,能超越SQL在高性能芯片上跑低性能算法。而用SPL在Intel芯片上跑高性能算法,当然还能获得比飞腾更好的性能。
就我们的工作经验来看,绝大多数的数据仓库运算都可以获得这种优化。只要写出的SQL够长够复杂,基本都有不少可优化的环节。如果我们用SPL来重构数据仓库,就可能把现有运算性能再提高一个数量级。
这个测试结果表上还可以看出两个结论:
1.读数据库显然比读文件的性能要差很多。这是因为数据库IO成本很高,而且很难做高效的压缩。要想获得最高性能,尽量不要把数据存到数据库中。象我们在另一篇文章《数据库的封闭性》中说的,未来的数据仓库不必要有“库”这么个形式。
2.飞腾上SPL的性能并没有比Intel差出数量级(传说飞腾落后5年,按摩尔定律,差不多有一个数量级)。数据密集型的计算性能,起决定性作用的常常是硬盘和内存,而不是CPU。我不知道这组设备的飞腾芯片到底和Intel差多少,但即使有差距,也不会造成整体性能上数量级的下降,做好存储方面的优化要比CPU重要。
数据蒋堂 第二年原创文章
- 中国报表漫谈
- 遍历复用
润乾软件创始人、首席科学家
中国大数据产业生态联盟 专家委员
1989年国际奥林匹克数学竞赛团体冠军成员,个人金牌
清华大学计算机硕士
发明了非线性报表模型,并著《非线性报表模型原理》
创建离散数据集模型,颠覆四十年关系代数理论体系!
2016、2017年中国软件和信息服务业 • 十大领军人物
2017年度中国数据大工匠
数据领域专业技术讲堂《数据蒋堂》创办者
点“阅读原文”,在乾学院与作者交流